2020 年中的時候意外看到了旗標的「雷切外殼復古街機」這個產品,以前在學 PHP 的時候很常的時間都是看旗標的書,沒想到這幾年旗標還有針對自造者領域推出產品。
不過看到上面寫著 Python 的時候,我就開始思考「如果上面運行的是 Ruby 呢?」
因為公司政策的關係,從開始工作後我幾乎每年都會到日本參加 RubyKaigi 研討會,也在這個過程中接觸到了 mruby 和 mruby/c 這兩個衍伸的 Ruby 語言,前者是 Ruby 之父 Matz 設計給嵌入式系統所使用的,主要是針對像是樹莓派這類硬體使用。
而後者則是由社群所主導的專案,目的是能夠在微控制器這類單晶片上使用,讓我自己印象最深刻的就是日本獺祭(旭酒造)也有使用 mruby/c 來開發酒廠相關的監控設備這件事情,也因此我自己也開始做了一些嘗試,不過大多只限於直接使用 mruby 或者 mruby/c 這種程度上。
回到會開始做這個嘗試的起因,當我買到了這款產品後,順勢的想到一個可能性。
「我們 Open Unlight 的一週年活動也許可以拿來當作紀念品?」
Open Unlight 是跟朋友基於日本在去年開源的頁遊為基礎去營運的遊戲。
雖然以時間上來說我們很難在短時間內開發一款遊戲並趕在八月推出,但是我還是動手做了一些實驗,嘗試讓 mruby/c 可以運行在這塊 D1 Mini 的板子上,不過現實是非常殘酷的,雖然 mruby/c 支援 ESP32 但卻不支援他的上一代 ESP8266 這塊晶片,另一方面如果再不依賴 Arduino 生態系的前提下,光是要能讓 TFT 螢幕顯示出東西就有相當程度的困難度,而 mruby/c 是基於 FreeRTOS 作為基礎的,以我這幾年的經驗中我判斷還沒有能力跟對應的知識能在短時間內開發出可以使用的軟體。
不過既然我們能使用的方案都無法使用,要怎麼讓這塊板子能夠同時使用 Ruby 和 Arduino 呢?
剛好在去年準備今年要投稿 RubyKaigi 的題目時看到了 mruby-L1VM 這個專案實作了有部分功能的 mruby 虛擬機,而實作上只有 1000 多行,既然實作 mruby 的虛擬機不是那麼的困難,為什麼不自己做看看呢?
除此之外,我們在實作的過程中會獲得不少的好處,過去幾年我大致上讀了一次 mruby 的原始碼、部分 Ruby 的原始碼,這次動手之後又對於一個語言的運作原理有一定程度上的理解。有很多在「使用」上的問題,也能夠從語言的設計層面去理解跟解釋。
現在的電腦運行的很快,我們在學習程式語言的時候很少會討論資料結構、演算法跟效能的問題,雖然在商業上這確實不是一個優先的問題但他仍是我們成為一個優秀的軟體工程師需要面對的問題,尤其時你發現你使用的語言已經「做的很好」的狀況下,要怎麼善用「語言」來拿到更好的效果就變成跟其他人拉開距離的關鍵。
這是為甚麼我打算開始這樣的挑戰,希望正在看這篇文章的你也可以鼓起勇氣挑戰自己常用的語言。
我是蒼時,歡迎到我的部落格看看,大多會是網站開發相關的文章。